home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / kob / kob001s.lzh / xbfunc.has < prev    next >
Text File  |  1996-01-31  |  25KB  |  1,721 lines

  1.  
  2. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  3. *
  4. *    xbfunc.has  ……   ぺけ-BASICの標準関数
  5. *
  6. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  7.  
  8.  
  9.     .include    doscall.mac
  10.     .include    iocscall.mac
  11.     .include    fefunc.h
  12.     .include    fdef.h
  13.  
  14.     .include    variable.h
  15.  
  16.  
  17.     .xref    hash
  18.  
  19.  
  20.     .text
  21.     .even
  22.  
  23.     .xdef    standard_init
  24. standard_init:
  25.     move.w    d5,-(sp)
  26.  
  27.     lea.l    ptr_token(pc),a5
  28.     lea.l    ptr_param(pc),a0
  29.     lea.l    ptr_exec(pc),a1
  30.     moveq    #0,d3
  31. standard_init_loop:
  32.     bsr    hash
  33.  * a2.l = 元の対象の開始アドレス
  34.  * d4.l = (hash.w)(文字数 - 1)
  35.     move.l    d4,(a4)+    * (hash.w)(文字数 - 1)
  36.     move.l    a2,(a4)+    * 名前
  37.     move.w    (a0,d3.w),d0
  38.     lea.l    (a0,d0.w),a2
  39.     move.l    a2,(a4)+    * パラメータリストを指すポインタ
  40.     move.w    (a1,d3.w),d0
  41.     lea.l    (a1,d0.w),a2
  42.     move.l    a2,(a4)+    * 実行アドレス
  43.  
  44.     addq.w    #1,d6
  45.     addq.w    #2,d3
  46.     addq.l    #1,a5        * $00
  47.  
  48.     tst.b    (a5)
  49.     bne    standard_init_loop
  50.  
  51.  
  52.  * 標準関数の初期化処理
  53.     move.w    #-1,strtok_work
  54.  
  55.  
  56.     move.w    (sp)+,d5
  57.     rts
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. ptr_token:
  68.  
  69. * 数値演算
  70.     .dc.b    'pi',0
  71.     .dc.b    'abs',0
  72.     .dc.b    'fix',0
  73.     .dc.b    'int',0
  74.     .dc.b    'sgn',0
  75.     .dc.b    'sin',0
  76.     .dc.b    'cos',0
  77.     .dc.b    'tan',0
  78.     .dc.b    'atan',0
  79.     .dc.b    'log',0
  80.     .dc.b    'exp',0
  81.     .dc.b    'pow',0
  82.     .dc.b    'sqr',0
  83.     .dc.b    'randomize',0
  84.     .dc.b    'rnd',0
  85.     .dc.b    'rand',0
  86.     .dc.b    'srand',0
  87.  
  88. * データ変換
  89.     .dc.b    'atof',0
  90.     .dc.b    'atoi',0
  91.     .dc.b    'ecvt',0
  92.     .dc.b    'fcvt',0
  93.     .dc.b    'gcvt',0
  94.     .dc.b    'itoa',0
  95.     .dc.b    'str$',0
  96.     .dc.b    'val',0
  97. **    .dc.b    'using$',0        **
  98. **    .dc.b    'atob',0        **
  99.  
  100.     .dc.b    'asc',0
  101.     .dc.b    'instr',0
  102.     .dc.b    'len',0
  103.     .dc.b    'bin$',0
  104.     .dc.b    'chr$',0
  105.     .dc.b    'hex$',0
  106.     .dc.b    'left$',0
  107.     .dc.b    'mid$',0
  108.     .dc.b    'mirror$',0
  109.     .dc.b    'oct$',0
  110.     .dc.b    'right$',0
  111.     .dc.b    'space$',0
  112.     .dc.b    'spc',0
  113.     .dc.b    'tab',0
  114.     .dc.b    'string$',0
  115. **    .dc.b    'float$',0        **
  116. **    .dc.b    'hexfloat',0        **
  117.  
  118. * 文字列処理
  119.     .dc.b    'strchr',0
  120.     .dc.b    'strcspn',0
  121.     .dc.b    'strlen',0
  122.     .dc.b    'strlwr',0
  123.     .dc.b    'strnset',0
  124.     .dc.b    'strrchr',0
  125.     .dc.b    'strrev',0
  126.     .dc.b    'strset',0
  127.     .dc.b    'strspn',0
  128.     .dc.b    'strtok',0
  129.     .dc.b    'strupr',0
  130.     .dc.b    'isalnum',0
  131.     .dc.b    'isalpha',0
  132.     .dc.b    'isascii',0
  133.     .dc.b    'iscntrl',0
  134.     .dc.b    'isdigit',0
  135.     .dc.b    'isgraph',0
  136.     .dc.b    'islower',0
  137.     .dc.b    'isprint',0
  138.     .dc.b    'ispunct',0
  139.     .dc.b    'isspace',0
  140.     .dc.b    'isupper',0
  141.     .dc.b    'isxdigit',0
  142.     .dc.b    'toascii',0
  143.     .dc.b    'tolower',0
  144.     .dc.b    'toupper',0
  145.  
  146. * ファイル入出力
  147.     .dc.b    'dskf',0
  148.     .dc.b    'fclose',0
  149.     .dc.b    'fcloseall',0
  150.     .dc.b    'feof',0
  151.     .dc.b    'fgetc',0
  152.     .dc.b    'fopen',0
  153.     .dc.b    'fputc',0
  154.     .dc.b    'fread',0
  155.     .dc.b    'freads',0
  156.     .dc.b    'fseek',0
  157.     .dc.b    'fwrite',0
  158.     .dc.b    'fwrites',0
  159.     .dc.b    'fdelete',0
  160.     .dc.b    'frename',0
  161.  
  162.  
  163.  
  164.     .dc.b    0
  165.     .even
  166.  
  167.  
  168.  
  169.  
  170. ptr_param:
  171. pp:
  172.     .dc.w    p_pi-pp
  173.     .dc.w    p_abs-pp
  174.     .dc.w    p_fix-pp
  175.     .dc.w    p_int-pp
  176.     .dc.w    p_sgn-pp
  177.     .dc.w    p_sin-pp
  178.     .dc.w    p_cos-pp
  179.     .dc.w    p_tan-pp
  180.     .dc.w    p_atan-pp
  181.     .dc.w    p_log-pp
  182.     .dc.w    p_exp-pp
  183.     .dc.w    p_pow-pp
  184.     .dc.w    p_sqr-pp
  185.     .dc.w    p_randomize-pp
  186.     .dc.w    p_rnd-pp
  187.     .dc.w    p_rand-pp
  188.     .dc.w    p_srand-pp
  189.     .dc.w    p_atof-pp
  190.     .dc.w    p_atoi-pp
  191.     .dc.w    p_ecvt-pp
  192.     .dc.w    p_fcvt-pp
  193.     .dc.w    p_gcvt-pp
  194.     .dc.w    p_itoa-pp
  195.     .dc.w    p_strS-pp
  196.     .dc.w    p_val-pp
  197.     .dc.w    p_asc-pp
  198.     .dc.w    p_instr-pp
  199.     .dc.w    p_len-pp
  200.     .dc.w    p_binS-pp
  201.     .dc.w    p_chrS-pp
  202.     .dc.w    p_hexS-pp
  203.     .dc.w    p_leftS-pp
  204.     .dc.w    p_midS-pp
  205.     .dc.w    p_mirrorS-pp
  206.     .dc.w    p_octS-pp
  207.     .dc.w    p_rightS-pp
  208.     .dc.w    p_spaceS-pp
  209.     .dc.w    p_spc-pp
  210.     .dc.w    p_tab-pp
  211.     .dc.w    p_stringS-pp
  212.     .dc.w    p_strchr-pp
  213.     .dc.w    p_strcspn-pp
  214.     .dc.w    p_len-pp
  215.     .dc.w    p_strlwr-pp
  216.     .dc.w    p_strnset-pp
  217.     .dc.w    p_strrchr-pp
  218.     .dc.w    p_strrev-pp
  219.     .dc.w    p_strset-pp
  220.     .dc.w    p_strspn-pp
  221.     .dc.w    p_strtok-pp
  222.     .dc.w    p_strupr-pp
  223.     .dc.w    p_isalnum-pp
  224.     .dc.w    p_isalpha-pp
  225.     .dc.w    p_isascii-pp
  226.     .dc.w    p_iscntrl-pp
  227.     .dc.w    p_isdigit-pp
  228.     .dc.w    p_isgraph-pp
  229.     .dc.w    p_islower-pp
  230.     .dc.w    p_isprint-pp
  231.     .dc.w    p_ispunct-pp
  232.     .dc.w    p_isspace-pp
  233.     .dc.w    p_isupper-pp
  234.     .dc.w    p_isxdigit-pp
  235.     .dc.w    p_toascii-pp
  236.     .dc.w    p_tolower-pp
  237.     .dc.w    p_toupper-pp
  238.     .dc.w    p_dskf-pp
  239.     .dc.w    p_fclose-pp
  240.     .dc.w    p_fcloseall-pp
  241.     .dc.w    p_feof-pp
  242.     .dc.w    p_fgetc-pp
  243.     .dc.w    p_fopen-pp
  244.     .dc.w    p_fputc-pp
  245.     .dc.w    p_fread-pp
  246.     .dc.w    p_freads-pp
  247.     .dc.w    p_fseek-pp
  248.     .dc.w    p_fwrite-pp
  249.     .dc.w    p_fwrites-pp
  250.     .dc.w    p_fdelete-pp
  251.     .dc.w    p_frename-pp
  252.  
  253.  
  254. ptr_exec:
  255. pe:
  256.     .dc.w    pi-pe
  257.     .dc.w    abs-pe
  258.     .dc.w    fix-pe
  259.     .dc.w    int-pe
  260.     .dc.w    sgn-pe
  261.     .dc.w    sin-pe
  262.     .dc.w    cos-pe
  263.     .dc.w    tan-pe
  264.     .dc.w    atan-pe
  265.     .dc.w    log-pe
  266.     .dc.w    exp-pe
  267.     .dc.w    pow-pe
  268.     .dc.w    sqr-pe
  269.     .dc.w    randomize-pe
  270.     .dc.w    rnd-pe
  271.     .dc.w    rand-pe
  272.     .dc.w    srand-pe
  273.     .dc.w    atof-pe
  274.     .dc.w    atoi-pe
  275.     .dc.w    ecvt-pe
  276.     .dc.w    fcvt-pe
  277.     .dc.w    gcvt-pe
  278.     .dc.w    itoa-pe
  279.     .dc.w    strS-pe
  280.     .dc.w    val-pe
  281.     .dc.w    asc-pe
  282.     .dc.w    instr-pe
  283.     .dc.w    len-pe
  284.     .dc.w    binS-pe
  285.     .dc.w    chrS-pe
  286.     .dc.w    hexS-pe
  287.     .dc.w    leftS-pe
  288.     .dc.w    midS-pe
  289.     .dc.w    mirrorS-pe
  290.     .dc.w    octS-pe
  291.     .dc.w    rightS-pe
  292.     .dc.w    spaceS-pe
  293.     .dc.w    spc-pe
  294.     .dc.w    tab-pe
  295.     .dc.w    stringS-pe
  296.     .dc.w    strchr-pe
  297.     .dc.w    strcspn-pe
  298.     .dc.w    len-pe
  299.     .dc.w    strlwr-pe
  300.     .dc.w    strnset-pe
  301.     .dc.w    strrchr-pe
  302.     .dc.w    strrev-pe
  303.     .dc.w    strset-pe
  304.     .dc.w    strspn-pe
  305.     .dc.w    strtok-pe
  306.     .dc.w    strupr-pe
  307.     .dc.w    isalnum-pe
  308.     .dc.w    isalpha-pe
  309.     .dc.w    isascii-pe
  310.     .dc.w    iscntrl-pe
  311.     .dc.w    isdigit-pe
  312.     .dc.w    isgraph-pe
  313.     .dc.w    islower-pe
  314.     .dc.w    isprint-pe
  315.     .dc.w    ispunct-pe
  316.     .dc.w    isspace-pe
  317.     .dc.w    isupper-pe
  318.     .dc.w    isxdigit-pe
  319.     .dc.w    toascii-pe
  320.     .dc.w    tolower-pe
  321.     .dc.w    toupper-pe
  322.     .dc.w    dskf-pe
  323.     .dc.w    fclose-pe
  324.     .dc.w    fcloseall-pe
  325.     .dc.w    feof-pe
  326.     .dc.w    fgetc-pe
  327.     .dc.w    fopen-pe
  328.     .dc.w    fputc-pe
  329.     .dc.w    fread-pe
  330.     .dc.w    freads-pe
  331.     .dc.w    fseek-pe
  332.     .dc.w    fwrite-pe
  333.     .dc.w    fwrites-pe
  334.     .dc.w    fdelete-pe
  335.     .dc.w    frename-pe
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343. *-------------------
  344.  
  345.  
  346.  * float 返り値 *
  347.  
  348. p_pi:
  349.     .dc.w    float_omt    * 省略可能なFLOAT
  350.     .dc.w    float_ret
  351.  
  352. p_pow:
  353.     .dc.w    float_val    * 省略不能なFLOAT
  354. p_abs:
  355. p_fix:
  356. p_sgn:
  357. p_sin:
  358. p_cos:
  359. p_tan:
  360. p_atan:
  361. p_log:
  362. p_exp:
  363. p_sqr:
  364. p_int:
  365.     .dc.w    float_val    * 省略不能なFLOAT
  366. p_rnd:
  367.     .dc.w    float_ret
  368.  
  369.  
  370. p_atof:
  371. p_val:
  372.     .dc.w    str_val
  373.     .dc.w    float_ret
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  * int 返り値 *
  381.  
  382. p_rand:
  383.     .dc.w    int_ret
  384.  
  385.  
  386. p_instr:
  387.     .dc.w    int_val
  388. p_strcspn:
  389. p_strspn:
  390.     .dc.w    str_val
  391. p_asc:
  392. p_len:
  393. p_atoi:
  394.     .dc.w    str_val
  395.     .dc.w    int_ret
  396.  
  397.  
  398. p_strchr:
  399. p_strrchr:
  400.     .dc.w    str_val
  401. p_isalnum:
  402. p_isalpha:
  403. p_isascii:
  404. p_iscntrl:
  405. p_isdigit:
  406. p_isgraph:
  407. p_islower:
  408. p_isprint:
  409. p_ispunct:
  410. p_isspace:
  411. p_isupper:
  412. p_isxdigit:
  413. p_toascii:
  414. p_tolower:
  415. p_toupper:
  416. p_dskf:
  417.     .dc.w    char_val
  418.     .dc.w    int_ret
  419.  
  420.  
  421.  
  422.  
  423. p_fputc:
  424.     .dc.w    char_val
  425. p_fclose:
  426. p_feof:
  427. p_fgetc:
  428.     .dc.w    int_val
  429. p_fcloseall:
  430.     .dc.w    int_ret
  431.  
  432.  
  433. p_fread:
  434. p_fwrite:
  435.     .dc.w    ary1_fic
  436.     .dc.w    int_val
  437.     .dc.w    int_val
  438.     .dc.w    int_ret
  439.  
  440. p_freads:
  441.     .dc.w    str_vp
  442.     .dc.w    int_val
  443.     .dc.w    int_ret
  444.  
  445. p_fwrites:
  446.     .dc.w    str_val
  447.     .dc.w    int_val
  448.     .dc.w    int_ret
  449.  
  450.  
  451. p_fseek:
  452.     .dc.w    int_val
  453.     .dc.w    int_val
  454.     .dc.w    int_val
  455.     .dc.w    int_ret
  456.  
  457.  
  458. p_fopen:
  459. p_frename:
  460.     .dc.w    str_val
  461. p_fdelete:
  462.     .dc.w    str_val
  463.     .dc.w    int_ret
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  * str 返り値 *
  472.  
  473.  
  474. p_leftS:
  475. p_rightS:
  476.     .dc.w    str_val
  477. p_binS:
  478. p_octS:
  479. p_hexS:
  480. p_spaceS:
  481. p_spc:
  482. p_tab:
  483. p_itoa:
  484.     .dc.w    int_val
  485.     .dc.w    str_ret
  486.  
  487.  
  488. p_midS:
  489.     .dc.w    str_val
  490.     .dc.w    int_val
  491.     .dc.w    int_val
  492.     .dc.w    str_ret
  493.  
  494.  
  495. p_gcvt:
  496.     .dc.w    float_val
  497.     .dc.w    int_val
  498.     .dc.w    str_ret
  499.  
  500. p_strnset:
  501.     .dc.w    str_vp
  502.     .dc.w    char_val
  503.     .dc.w    int_val
  504.     .dc.w    str_ret
  505.  
  506.  
  507. p_ecvt:
  508. p_fcvt:
  509.     .dc.w    float_val
  510.     .dc.w    int_val
  511.     .dc.w    int_vp
  512.     .dc.w    int_vp
  513.     .dc.w    str_ret
  514.  
  515.  
  516. p_strS:
  517.     .dc.w    float_val
  518.     .dc.w    str_ret
  519.  
  520. p_strtok:
  521.     .dc.w    str_val
  522.     .dc.w    str_val
  523.     .dc.w    str_ret
  524.  
  525.  
  526.  
  527. p_stringS:
  528.     .dc.w    int_val
  529. p_mirrorS:
  530.     .dc.w    str_val
  531.     .dc.w    str_ret
  532.  
  533.  
  534. p_strlwr:
  535. p_strupr:
  536. p_strrev:
  537.     .dc.w    str_vp
  538.     .dc.w    str_ret
  539.  
  540.  
  541. p_strset:
  542.     .dc.w    str_vp
  543. p_chrS:
  544.     .dc.w    char_val
  545.     .dc.w    str_ret
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554. p_randomize:
  555. p_srand:
  556.     .dc.w    int_val
  557.     .dc.w    void_ret
  558.  
  559. *-------------------
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584. *-------------------
  585.  
  586. dskf:
  587.     moveq    #0,d0
  588.     move.b    par1+9(sp),d0
  589.     lea.l    tmp,a0
  590.     move.l    a0,-(sp)
  591.     move.w    d0,-(sp)
  592.     DOS    _DSKFRE
  593.     addq.l    #6,sp
  594.     tst.l    d0
  595.     bmi    doscall_err
  596.     move.w    (a0),d0
  597.     mulu    4(a0),d0
  598.     mulu    6(a0),d0
  599.     bra    return_d0
  600.  
  601.  
  602. fclose:
  603.     move.w    par1+8(sp),-(sp)
  604.     DOS    _CLOSE
  605.     addq.l    #2,sp
  606.     tst.l    d0
  607.     bge    file_end
  608.     bra    doscall_err
  609. fcloseall:
  610.     DOS    _ALLCLOSE
  611.     bra    file_end
  612. feof:                    * by Eriko Tachibana
  613.     moveq    #1,d0
  614.     move.w    d0,-(sp)        * 現在位置から
  615.     move.l    d0,-(sp)        * 1バイト後方に移動
  616.     move.w    6+par1+8(sp),-(sp)
  617.     DOS    _SEEK
  618.     tst.l    d0
  619.     bmi    feof_err
  620.     moveq    #-1,d0
  621.     move.l    d0,2(sp)        * 1バイト前方に移動
  622.     DOS    _SEEK
  623.     addq.l    #8,sp
  624.     bra    return_zero
  625. feof_err:
  626.     addq.l    #8,sp
  627.     cmpi.w    #-25,d0        * 指定の位置にはシークできまへん
  628.     beq    return_minus
  629.     bra    doscall_err
  630.  
  631. fgetc:
  632.     move.w    par1+8(sp),-(sp)
  633.     DOS    _FGETC
  634.     addq.l    #2,sp
  635.     tst.l    d0
  636.     bge    file_end
  637.     cmpi.w    #$ffff,d0
  638.     beq    return_minus
  639.     bra    doscall_err
  640.  
  641. fopen:
  642.     movea.l    par2+6(sp),a0
  643.     moveq    #$20,d0
  644.     or.b    (a0)+,d0
  645.     cmpi.b    #'r',d0
  646.     beq    fopen_read
  647.     cmpi.b    #'w',d0
  648.     beq    fopen_write
  649.     cmpi.b    #'c',d0
  650.     bne    openmode_err
  651. fopen_create:
  652.     tst.b    (a0)        * c
  653.     bne    openmode_err
  654.  
  655.     move.w    #$20,-(sp)
  656.     move.l    2+par1+6(sp),-(sp)
  657.     DOS    _CREATE
  658.     addq.l    #6,sp
  659.     tst.l    d0
  660.     bge    file_end
  661.     bra    doscall_err
  662.  
  663. fopen_read:
  664.     moveq    #0,d1
  665.     moveq    #$20,d0
  666.     or.b    (a0),d0
  667.     cmpi.b    #'w',d0        * rw
  668.     bne    fopen_ok
  669.     moveq    #2,d1
  670.     addq.l    #1,a0
  671.     bra    fopen_ok
  672.  
  673. fopen_write:
  674.     moveq    #1,d1
  675. fopen_ok:
  676.     tst.b    (a0)
  677.     bne    openmode_err
  678.  
  679.     move.w    d1,-(sp)
  680.     move.l    2+par1+6(sp),-(sp)
  681.     DOS    _OPEN
  682.     addq.l    #6,sp
  683.     tst.l    d0
  684.     bge    file_end
  685.     bra    doscall_err
  686.  
  687.  
  688.  
  689.  
  690. fputc:
  691.     moveq    #0,d0
  692.     move.b    par1+9(sp),d0
  693.     move.w    par2+8(sp),-(sp)
  694.     move.w    d0,-(sp)
  695.     DOS    _FPUTC
  696.     addq.l    #4,sp
  697.     tst.l    d0
  698.     bmi    doscall_err
  699.     moveq    #0,d0
  700.     move.b    par1+9(sp),d0
  701.     bra    return_d0
  702.  
  703. fread:
  704.     bsr    frw_sub
  705.     move.l    d2,-(sp)
  706.     move.l    a0,-(sp)
  707.     move.w    8+par3+8(sp),-(sp)
  708.     DOS    _READ
  709.     lea.l    10(sp),sp
  710.     tst.l    d0
  711.     bge    file_end
  712.     bra    doscall_err
  713. fwrite:
  714.     bsr    frw_sub
  715.     move.l    d2,-(sp)
  716.     move.l    a0,-(sp)
  717.     move.w    8+par3+8(sp),-(sp)
  718.     DOS    _WRITE
  719.     lea.l    10(sp),sp
  720.     tst.l    d0
  721.     bge    file_end
  722.     bra    doscall_err
  723.  
  724. frw_sub:
  725.     move.l    4+par1+6(sp),a0
  726.     addq.l    #6,a0
  727.     move.w    (a0)+,d0        * データのサイズ(1,4,8)
  728.     move.b    1f-1(pc,d0.w),d0    * シフト数 (by Eriko Tachibana)
  729.     moveq    #0,d1
  730.     move.w    (a0)+,d1        * 添え字の大きさ(0~65535)
  731.     move.l    4+par2+6(sp),d2        * 書き込みサイズ
  732.     bmi    無効な要素数
  733.     addq.l    #1,d1
  734.     cmp.l    d2,d1
  735.     bcs    無効な要素数
  736.     lsl.l    d0,d2
  737.     rts
  738. 1:
  739.     .dc.b    0,0,0,2,0,0,0,3
  740.     .even
  741.  
  742.  
  743. fwrites:
  744.     movea.l    par1+6(sp),a0
  745.     move.w    par2+8(sp),-(sp)
  746.     move.l    a0,-(sp)
  747.     DOS    _FPUTS
  748.     addq.l    #6,sp
  749.     tst.l    d0
  750.     bmi    doscall_err
  751.     moveq    #0,d0
  752. @@:
  753.     addq.w    #1,d0
  754.     tst.b    (a0)+
  755.     bne    @b
  756.     subq.w    #1,d0
  757.     bra    return_d0
  758.  
  759. freads:
  760.     move.w    par2+8(sp),-(sp)
  761.     lea.l    tmp,a1
  762.     move.l    a1,-(sp)    * inpptr
  763.     move.w    #$ff_00,(a1)+
  764.     DOS    _FGETS
  765.     addq.l    #6,sp
  766.     tst.l    d0
  767.     bge    @f
  768.     cmpi.w    #$ffff,d0
  769.     beq    return_minus
  770.     bra    doscall_err
  771. @@:
  772.     movea.l    par1+6(sp),a0
  773.     moveq    #0,d0
  774. @@:
  775.     addq.w    #1,d0
  776.     move.b    (a1)+,(a0)+
  777.     bne    @b
  778.     subq.w    #1,d0
  779.     beq    return_d0    * EOF($1a) check (H8/1/21)
  780.     cmpi.b    #$1a,-2(a0)
  781.     bne    return_d0
  782. *    subq.w    #1,d0
  783.     moveq    #-1,d0
  784.     clr.b    -2(a0)
  785.     bra    return_d0
  786.  
  787.  
  788.  
  789.  
  790. fseek:
  791.     move.w    par3+8(sp),-(sp)
  792.     move.l    2+par2+6(sp),-(sp)
  793.     move.w    6+par1+8(sp),-(sp)
  794.     DOS    _SEEK
  795.     addq.l    #8,sp
  796.     tst.l    d0
  797.     bge    file_end
  798.     bra    doscall_err
  799.  
  800. fdelete:
  801.     move.l    par1+6(sp),-(sp)
  802.     DOS    _DELETE
  803.     addq.l    #4,sp
  804.     tst.l    d0
  805.     bge    file_end
  806.     bra    doscall_err
  807.  
  808. frename:
  809.     move.l    par2+6(sp),-(sp)
  810.     move.l    4+par1+6(sp),-(sp)
  811.     DOS    _RENAME
  812.     addq.l    #8,sp
  813.     tst.l    d0
  814.     bge    file_end
  815.     bra    doscall_err
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829. *-------------------
  830. strchr:
  831.     move.l    par1+6(sp),a0
  832.     move.b    par2+9(sp),d2
  833.     moveq    #0,d0
  834. @@:
  835.     move.b    (a0)+,d1
  836.     beq    return_minus
  837.     addq.w    #1,d0            * 7/11/8 (thanks for NAONAO.)
  838.     cmp.b    d1,d2
  839.     bne    @b
  840.     subq.w    #1,d0            * 7/11/8
  841.     bra    return_d0
  842.  
  843. strcspn:
  844.     move.l    par2+6(sp),a1
  845.     movea.l    a1,a0
  846.     moveq    #-2,d4
  847. @@:
  848.     addq.w    #1,d4
  849.     tst.b    (a0)+
  850.     bne    @b
  851.  
  852.     move.l    par1+6(sp),a0
  853.     moveq    #0,d0
  854. strcspn1:
  855.     move.b    (a0)+,d1
  856.     beq    return_d0
  857.  
  858.     move.w    d4,d2
  859.     bmi    strcspn2
  860.     movea.l    a1,a2
  861. @@:
  862.     cmp.b    (a2)+,d1
  863.     dbeq    d2,@b
  864.     beq    return_d0
  865. strcspn2:
  866.     addq.w    #1,d0
  867.     bra    strcspn1
  868.  
  869.  
  870. strspn:
  871.     move.l    par2+6(sp),a1
  872.     movea.l    a1,a0
  873.     moveq    #-2,d4
  874. @@:
  875.     addq.w    #1,d4
  876.     tst.b    (a0)+
  877.     bne    @b
  878.  
  879.     move.l    par1+6(sp),a0
  880.     moveq    #0,d0
  881. strspn1:
  882.     move.b    (a0)+,d1
  883.     beq    return_d0
  884.  
  885.     move.w    d4,d2
  886.     bmi    strspn2
  887.     movea.l    a1,a2
  888. @@:
  889.     cmp.b    (a2)+,d1
  890.     dbeq    d2,@b
  891.     bne    return_d0
  892. strspn2:
  893.     addq.w    #1,d0
  894.     bra    strspn1
  895.  
  896.  
  897.  
  898.  
  899.  
  900. strlwr:
  901.     move.l    par1+6(sp),a0
  902.     movea.l    a0,a1
  903. @@:
  904.     move.b    (a0)+,d0
  905.     beq    return_a1
  906.     cmpi.b    #'A',d0
  907.     bcs    @b
  908.     cmpi.b    #'Z',d0
  909.     bhi    @b
  910.     ori.b    #$20,-1(a0)
  911.     bra    @b
  912.  
  913. strupr:
  914.     move.l    par1+6(sp),a0
  915.     movea.l    a0,a1
  916. @@:
  917.     move.b    (a0)+,d0
  918.     beq    return_a1
  919.     cmpi.b    #'a',d0
  920.     bcs    @b
  921.     cmpi.b    #'z',d0
  922.     bhi    @b
  923.     andi.b    #$DF,-1(a0)
  924.     bra    @b
  925.  
  926.  
  927. strnset:
  928.     move.l    par1+6(sp),a0
  929.     move.b    par2+9(sp),d0
  930.     move.l    par3+6(sp),d1
  931.     movea.l    a0,a1
  932.     subq.w    #1,d1
  933.     bcs    return_a1
  934. @@:
  935.     tst.b    (a0)
  936.     beq    return_a1
  937.     move.b    d0,(a0)+
  938.     dbra    d1,@b
  939.     bra    return_a1
  940.  
  941. strrchr:
  942.     move.l    par1+6(sp),a0
  943.     move.b    par2+9(sp),d2
  944.     moveq    #0,d0
  945. @@:
  946.     addq.w    #1,d0
  947.     tst.b    (a0)+
  948.     bne    @b
  949.  
  950.     subq.l    #1,a0
  951.     subq.w    #2,d0
  952.     bcs    return_minus
  953.  
  954. @@:
  955.     cmp.b    -(a0),d2
  956.     dbeq    d0,@b
  957.     ext.l    d0
  958.     bra    return_d0
  959.  
  960. strset:
  961.     move.l    par1+6(sp),a0
  962.     move.b    par2+9(sp),d0
  963. @@:
  964.     tst.b    (a0)
  965.     beq    return_a1
  966.     move.b    d0,(a0)+
  967.     bra    @b
  968.  
  969.  
  970.  
  971.  
  972. strrev:
  973.     move.l    par1+6(sp),a1
  974.     move.l    a1,a2
  975.     lea.l    tmp,a0
  976.     moveq    #-1,d0
  977. @@:
  978.     addq.w    #1,d0
  979.     move.b    (a2)+,(a0)+
  980.     bne    @b
  981.  
  982.     subq.w    #1,d0
  983.     bcs    return_nula1
  984.     subq.l    #1,a0
  985.     move.l    a1,a2
  986. @@:
  987.     move.b    -(a0),(a2)+
  988.     dbra    d0,@b
  989.     clr.b    (a2)
  990.     bra    return_a1
  991.  
  992.  
  993. strtok:
  994.     move.l    par1+6(sp),a0
  995.     tst.b    (a0)
  996.     beq    strtok二回目
  997.     lea.l    strtok_buf,a1
  998.     movea.l    a1,a2
  999. @@:
  1000.     move.b    (a0)+,(a2)+
  1001.     bne    @b
  1002.     moveq    #0,d0
  1003.     bra    strtok4
  1004.  
  1005.  
  1006. strtok二回目:
  1007.     move.w    strtok_work,d0
  1008.     bmi    return_nul
  1009.     lea.l    strtok_buf,a1
  1010.     adda.w    d0,a1
  1011.  
  1012. strtok4:
  1013.     move.l    par2+6(sp),a0
  1014.     bsr    len_a0
  1015. strtok2:
  1016.     move.b    (a1),d1
  1017.     bsr    check_a0
  1018.     bne    strtok1
  1019.     addq.w    #1,d0
  1020.     addq.l    #1,a1
  1021.     bra    strtok2
  1022.  
  1023. strtok1:
  1024.     lea.l    tmp,a3
  1025. strtok_loop:
  1026.     move.b    (a1)+,d1
  1027.     beq    strtok_end
  1028.     addq.w    #1,d0
  1029.     bsr    check_a0
  1030.     beq    strtok_end
  1031.     move.b    d1,(a3)+
  1032.     bra    strtok_loop
  1033.  
  1034. strtok_end:
  1035.     clr.b    (a3)
  1036.     move.w    d0,strtok_work
  1037.     bra    return_buf
  1038.  
  1039.  
  1040.  
  1041. len_a0:
  1042.     move.l    a0,a2
  1043.     moveq    #0,d2
  1044. @@:
  1045.     addq.w    #1,d2
  1046.     tst.b    (a2)+
  1047.     bne    @b
  1048.     rts
  1049.  
  1050. check_a0:
  1051.     move.l    a0,a2
  1052.     move.l    d2,d3
  1053.     subq.w    #2,d3
  1054.     bcs    check_a0_end
  1055. @@:
  1056.     cmp.b    (a2)+,d1
  1057.     dbeq    d3,@b
  1058. check_a0_end:
  1059.     rts
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068. isalnum:
  1069.     move.b    par1+9(sp),d0
  1070.     cmpi.b    #'0',d0
  1071.     bcs    return_zero
  1072.     cmpi.b    #'9',d0
  1073.     bls    return_minus
  1074. isalpha0:
  1075.     cmpi.b    #'A',d0
  1076.     bcs    return_zero
  1077.     cmpi.b    #'Z',d0
  1078.     bls    return_minus
  1079. islower0:
  1080.     cmpi.b    #'a',d0
  1081.     bcs    return_zero
  1082.     cmpi.b    #'z',d0
  1083.     bls    return_minus
  1084.     bra    return_zero
  1085. isalpha:
  1086.     move.b    par1+9(sp),d0
  1087.     bra    isalpha0
  1088. isascii:
  1089.     move.b    par1+9(sp),d0
  1090.     bge    return_minus
  1091.     bra    return_zero
  1092. iscntrl:
  1093.     move.b    par1+9(sp),d0
  1094.     cmpi.b    #$7f,d0
  1095.     beq    return_minus
  1096.     cmpi.b    #$20,d0
  1097.     bcs    return_minus
  1098.     bra    return_zero
  1099. isdigit:
  1100.     move.b    par1+9(sp),d0
  1101.     cmpi.b    #'0',d0
  1102.     bcs    return_zero
  1103.     cmpi.b    #'9',d0
  1104.     bls    return_minus
  1105.     bra    return_zero
  1106. isgraph:
  1107.     move.b    par1+9(sp),d0
  1108.     cmpi.b    #$21,d0
  1109.     bcs    return_zero
  1110.     cmpi.b    #$7e,d0
  1111.     bls    return_minus
  1112.     bra    return_zero
  1113. islower:
  1114.     move.b    par1+9(sp),d0
  1115.     bra    islower0
  1116. isprint:
  1117.     move.b    par1+9(sp),d0
  1118.     cmpi.b    #$20,d0
  1119.     bcs    return_zero
  1120.     cmpi.b    #$7e,d0
  1121.     bls    return_minus
  1122.     bra    return_zero
  1123. ispunct:
  1124.     move.b    par1+9(sp),d0
  1125.     cmpi.b    #$20,d0
  1126.     bcs    return_zero
  1127.     cmpi.b    #$2f,d0
  1128.     bls    return_minus
  1129.     cmpi.b    #$3a,d0
  1130.     bcs    return_zero
  1131.     cmpi.b    #$40,d0
  1132.     bls    return_minus
  1133.     cmpi.b    #$5b,d0
  1134.     bcs    return_zero
  1135.     cmpi.b    #$60,d0
  1136.     bls    return_minus
  1137.     cmpi.b    #$7b,d0
  1138.     bcs    return_zero
  1139.     cmpi.b    #$7e,d0
  1140.     bls    return_minus
  1141.     bra    return_zero
  1142. isspace:
  1143.     move.b    par1+9(sp),d0
  1144.     cmpi.b    #$20,d0
  1145.     beq    return_minus
  1146.     cmpi.b    #$9,d0
  1147.     bcs    return_zero
  1148.     cmpi.b    #$d,d0
  1149.     bls    return_minus
  1150.     bra    return_zero
  1151. isupper:
  1152.     move.b    par1+9(sp),d0
  1153.     cmpi.b    #'A',d0
  1154.     bcs    return_zero
  1155.     cmpi.b    #'Z',d0
  1156.     bls    return_minus
  1157.     bra    return_zero
  1158. isxdigit:
  1159.     move.b    par1+9(sp),d0
  1160.     cmpi.b    #'0',d0
  1161.     bcs    return_zero
  1162.     cmpi.b    #'9',d0
  1163.     bls    return_minus
  1164.     ori.b    #$20,d0        * 島崎さん、ありがとー
  1165.     cmpi.b    #'a',d0
  1166.     bcs    return_zero
  1167.     cmpi.b    #'f',d0
  1168.     bls    return_minus
  1169.     bra    return_zero
  1170.  
  1171.  
  1172. toascii:
  1173.     moveq    #0,d0
  1174.     move.b    par1+9(sp),d0
  1175.     andi.w    #$7f,d0        * 島崎さん、ありがとー
  1176.     bra    return_d0
  1177. tolower:
  1178.     moveq    #0,d0
  1179.     move.b    par1+9(sp),d0
  1180.     cmpi.b    #'A',d0
  1181.     bcs    return_d0
  1182.     cmpi.b    #'Z',d0
  1183.     bhi    return_d0
  1184.     ori.b    #$20,d0
  1185.     bra    return_d0
  1186.  
  1187. toupper:
  1188.     moveq    #0,d0
  1189.     move.b    par1+9(sp),d0
  1190.     cmpi.b    #'a',d0
  1191.     bcs    return_d0
  1192.     cmpi.b    #'z',d0
  1193.     bhi    return_d0
  1194.     andi.b    #$DF,d0
  1195.     bra    return_d0
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204. *-------------------
  1205. instr:
  1206.     move.l    par2+6(sp),a0
  1207.     move.l    par3+6(sp),a1
  1208.  
  1209.     move.l    par1+6(sp),d1
  1210.     ble    return_zero
  1211.  
  1212.     move.l    d1,d0
  1213.     subq.w    #2,d1
  1214.     bcs    ins1
  1215. @@:
  1216.     tst.b    (a0)+
  1217.     dbeq    d1,@b
  1218.     beq    return_zero
  1219. ins1:
  1220.     move.b    (a1)+,d2
  1221. ins_loop:
  1222.     move.b    (a0)+,d1
  1223.     beq    return_zero
  1224.     cmp.b    d1,d2
  1225.     bne    ins2
  1226.         movea.l    a0,a2
  1227.         movea.l    a1,a3
  1228.     ins2_loop:
  1229.         move.b    (a1)+,d1
  1230.         beq    return_d0
  1231.         cmp.b    (a0)+,d1
  1232.         beq    ins2_loop
  1233.         movea.l    a2,a0
  1234.         movea.l    a3,a1
  1235. ins2:
  1236.     addq.w    #1,d0
  1237.     bra    ins_loop
  1238.  
  1239.  
  1240.  
  1241.  
  1242. midS:
  1243.     move.l    par1+6(sp),a1
  1244.     move.l    a1,a0
  1245.     moveq    #-1,d1
  1246. @@:
  1247.     addq.w    #1,d1
  1248.     tst.b    (a0)+
  1249.     bne    @b
  1250.  
  1251.     move.l    par2+6(sp),d0
  1252.     bmi    return_nul_string        * 7/11/8
  1253.     subq.w    #1,d0
  1254.     blt    return_nul
  1255.     beq    mid1
  1256.     sub.w    d0,d1
  1257.     bcc    @f
  1258.     add.w    d1,d0
  1259.     moveq    #0,d1
  1260. @@:
  1261.     add.w    d0,a1
  1262. mid1:
  1263.     move.l    par3+6(sp),d0
  1264.     bmi    return_nul_string        * 7/11/8
  1265.     sub.w    d0,d1
  1266.     bcc    @f
  1267.     add.w    d1,d0
  1268. @@:
  1269.     bra    rl共通
  1270.  
  1271.  
  1272. rightS:
  1273.     move.l    par1+6(sp),a1
  1274.     move.l    a1,a0
  1275.     moveq    #-1,d1
  1276. @@:
  1277.     addq.w    #1,d1
  1278.     tst.b    (a0)+
  1279.     bne    @b
  1280.  
  1281.     move.l    par2+6(sp),d0
  1282.     bmi    return_nul_string        * 7/11/8
  1283.     sub.w    d0,d1
  1284.     bcc    @f
  1285.     add.w    d1,d0
  1286.     moveq    #0,d1
  1287. @@:
  1288.     add.w    d1,a1
  1289.     bra    rl共通
  1290.  
  1291.  
  1292. leftS:
  1293.     move.l    par1+6(sp),a1
  1294.     move.l    par2+6(sp),d0
  1295.     bmi    return_nul_string        * 7/11/8
  1296. rl共通:
  1297.     lea.l    tmp,a0
  1298.     subq.w    #1,d0
  1299.     bcs    lef_end
  1300. @@:
  1301.     move.b    (a1)+,(a0)+
  1302.     dbra    d0,@b
  1303. lef_end:
  1304.     clr.b    (a0)
  1305.     bra    return_buf
  1306.  
  1307. return_nul_string:
  1308.     lea.l    tmp,a0
  1309.     clr.b    (a0)
  1310.     bra    return_buf
  1311.  
  1312.  
  1313.  
  1314. asc:
  1315.     move.l    par1+6(sp),a0
  1316.     moveq    #0,d0
  1317.     move.b    (a0),d0
  1318.     bra    return_d0
  1319. len:
  1320.     move.l    par1+6(sp),a0
  1321.     moveq    #0,d0
  1322. @@:
  1323.     addq.w    #1,d0
  1324.     tst.b    (a0)+
  1325.     bne    @b
  1326.     subq.w    #1,d0
  1327.     bra    return_d0
  1328.  
  1329. chrS:
  1330.     move.l    par1+6(sp),d0
  1331.     lea.l    tmp,a0
  1332.     move.b    d0,(a0)+
  1333.     clr.b    (a0)
  1334.     bra    return_buf
  1335. binS:
  1336.     move.l    par1+6(sp),d0
  1337.     lea.l    tmp,a0
  1338.     FPACK    __BTOS
  1339.     bra    return_buf
  1340. octS:
  1341.     move.l    par1+6(sp),d0
  1342.     lea.l    tmp,a0
  1343.     FPACK    __OTOS
  1344.     bra    return_buf
  1345. hexS:
  1346.     move.l    par1+6(sp),d0
  1347.     lea.l    tmp,a0
  1348.     FPACK    __HTOS
  1349.     bra    return_buf
  1350.  
  1351.  
  1352.  
  1353. stringS:
  1354.     movea.l    par2+6(sp),a0
  1355.     move.b    (a0),d1
  1356.     bra    ss共通
  1357.  
  1358. tab:
  1359.     moveq    #-1,d1
  1360.     IOCS    _B_LOCATE
  1361.     clr.w    d0
  1362.     swap    d0        * 現在のX座標
  1363.     move.w    par1+8(sp),d1
  1364.     sub.w    d0,d1
  1365.     bhi    @f
  1366.     moveq    #0,d1
  1367. @@:
  1368.     move.w    d1,d0
  1369.     moveq    #$20,d1
  1370.     bra    sst共通
  1371.  
  1372. spaceS:
  1373. spc:
  1374.     moveq    #$20,d1
  1375. ss共通:
  1376.     move.w    par1+8(sp),d0
  1377. sst共通:
  1378.     lea.l    tmp,a1
  1379.     subq.w    #1,d0
  1380.     bcs    return_nula1
  1381.     cmpi.w    #$ff,d0
  1382.     bcc    文字列長すぎ
  1383. @@:
  1384.     move.b    d1,(a1)+
  1385.     dbra    d0,@b
  1386.     clr.b    (a1)
  1387.     bra    return_buf
  1388.  
  1389.  
  1390. mirrorS:
  1391.     move.l    par1+6(sp),a0
  1392.     lea.l    tmp,a1
  1393.     movea.l    a1,a2
  1394.     moveq    #-1,d0
  1395. @@:
  1396.     addq.w    #1,d0
  1397.     tst.b    (a0)+
  1398.     bne    @b
  1399.  
  1400.     subq.w    #1,d0
  1401.     bcs    return_nula1
  1402.     subq.l    #1,a0
  1403. @@:
  1404.     move.b    -(a0),(a2)+
  1405.     dbra    d0,@b
  1406.     clr.b    (a2)
  1407.     bra    return_a1
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417. *-------------------
  1418. atof:
  1419.     move.l    par1+6(sp),a0
  1420.     FPACK    __STOD        * d2,d3 は捨てていい?
  1421.     bra    return_d0d1
  1422. atoi:
  1423.     move.l    par1+6(sp),a0
  1424.     FPACK    __STOL
  1425.     bra    return_d0
  1426.  
  1427. ecvt:
  1428.     movem.l    par1+2(sp),d0-d1
  1429.     move.l    par2+6(sp),d2
  1430.     lea.l    tmp,a0
  1431.     FPACK    __ECVT
  1432.     move.l    par3+6(sp),a1
  1433.     move.l    d0,(a1)
  1434.     move.l    par4+6(sp),a1
  1435.     move.l    d1,(a1)
  1436.     bra    return_buf
  1437. fcvt:
  1438.     movem.l    par1+2(sp),d0-d1
  1439.     move.l    par2+6(sp),d2
  1440.     lea.l    tmp,a0
  1441.     FPACK    __FCVT
  1442.     move.l    par3+6(sp),a1
  1443.     move.l    d0,(a1)
  1444.     move.l    par4+6(sp),a1
  1445.     move.l    d1,(a1)
  1446.     bra    return_buf
  1447.  
  1448. gcvt:
  1449.     movem.l    par1+2(sp),d0-d1
  1450.     move.l    par2+6(sp),d2
  1451.     lea.l    tmp,a0
  1452.     FPACK    __GCVT
  1453.     bra    return_buf
  1454.  
  1455. itoa:
  1456.     move.l    par1+6(sp),d0
  1457.     lea.l    tmp,a0
  1458.     FPACK    __LTOS
  1459.     bra    return_buf
  1460.  
  1461. strS:
  1462.     movem.l    par1+2(sp),d0-d1
  1463.     lea.l    tmp,a0
  1464.     FPACK    __DTOS
  1465.     bra    return_buf
  1466.  
  1467. val:
  1468.     move.l    par1+6(sp),a0
  1469.     FPACK    __VAL
  1470.     bra    return_d0d1
  1471.  
  1472.  
  1473. *-------------------
  1474. pi:
  1475.     tst.w    par1(sp)
  1476.     bmi    @f
  1477.     movem.l    par1+2(sp),d0-d1
  1478.     FPACK    __NPI
  1479.     bra    return_d0d1
  1480. @@:
  1481. *    FPACK    __PI
  1482.     move.l    #$400921fb,d0        * π
  1483.     move.l    #$54442d18,d1
  1484.     bra    return_d0d1
  1485.  
  1486.  
  1487. abs:
  1488.     movem.l    par1+2(sp),d0-d1
  1489.     bclr    #$1f,d0
  1490.     bra    return_d0d1
  1491. fix:
  1492.     movem.l    par1+2(sp),d0-d1
  1493.     FPACK    __DFIX
  1494.     bra    return_d0d1
  1495. int:
  1496.     movem.l    par1+2(sp),d0-d1
  1497.     FPACK    __DFLOOR
  1498.     bra    return_d0d1
  1499.  
  1500. sgn:
  1501. ; __DSGN 展開 by Eriko 95/02/19
  1502. ; int i:randomize(0):for i=0 to 10000:abs(rnd()-0.5):next:end
  1503. ; 182 -> 169 (/100s@xvi24MHz-float2)
  1504. ; 68881/2 に命令があるならそっちの方が速いと思う...
  1505.  
  1506.     move.l    (par1+2,sp),d0
  1507.     bgt    sgn_pl            * +0~+∞
  1508.  
  1509.     add.l    d0,d0
  1510.     bne    sgn_minus_1        * -0 未満
  1511.  
  1512.     move.l    (par1+2+4,sp),d1
  1513.     beq    return_d0d1        * 返値:+0
  1514. sgn_minus_1:
  1515.     move.l    #$bff00000,d0
  1516.     moveq    #0,d1            * 返値:-1
  1517.     bra    return_d0d1
  1518.  
  1519. sgn_pl:
  1520.     bne    @f
  1521.     move.l    (par1+2+4,sp),d1
  1522.     beq    return_d0d1        * 返値:+0
  1523. @@:
  1524.     move.l    #$3ff00000,d0
  1525.     moveq    #0,d1            * 返値:+1
  1526.  
  1527.     bra    return_d0d1
  1528.  
  1529.  
  1530.  
  1531. sin:
  1532.     movem.l    par1+2(sp),d0-d1
  1533.     FPACK    __SIN
  1534.     bra    return_d0d1
  1535. cos:
  1536.     movem.l    par1+2(sp),d0-d1
  1537.     FPACK    __COS
  1538.     bra    return_d0d1
  1539. tan:
  1540.     movem.l    par1+2(sp),d0-d1
  1541.     FPACK    __TAN
  1542.     bra    return_d0d1
  1543. atan:
  1544.     movem.l    par1+2(sp),d0-d1
  1545.     FPACK    __ATAN
  1546.     bra    return_d0d1
  1547. log:
  1548.     movem.l    par1+2(sp),d0-d1
  1549.     FPACK    __LOG
  1550.     bra    return_d0d1
  1551. exp:
  1552.     movem.l    par1+2(sp),d0-d1
  1553.     FPACK    __EXP
  1554.     bra    return_d0d1
  1555. pow:
  1556.     movem.l    par1+2(sp),d0-d1
  1557.     movem.l    par2+2(sp),d2-d3
  1558.     FPACK    __POWER
  1559.     bra    return_d0d1
  1560. sqr:
  1561.     movem.l    par1+2(sp),d0-d1
  1562.     tst.l    d0
  1563.     bge    @f
  1564.     add.l    d0,d0
  1565.     bne    irregular_param
  1566. @@:
  1567.     FPACK    __SQR
  1568.     bra    return_d0d1
  1569.  
  1570.  
  1571. randomize:
  1572.     move.l    par1+6(sp),d0
  1573.     FPACK    __RANDOMIZE
  1574.     bra    return_zero
  1575. srand:
  1576.     move.l    par1+6(sp),d0
  1577.     FPACK    __SRAND
  1578.     bra    return_zero
  1579.  
  1580. rnd:
  1581.     FPACK    __RND
  1582.     bra    return_d0d1
  1583. rand:
  1584.     FPACK    __RAND
  1585.     bra    return_d0
  1586.  
  1587.  
  1588. *-------------------
  1589. return_d1d2:            * FLOAT型を返す
  1590.     lea.l    fac(pc),a0
  1591.     movem.l    d1-d2,2(a0)
  1592.     moveq.l    #0,d0
  1593.     rts
  1594.  
  1595. return_d0d1:            * FLOAT型を返す
  1596.     lea.l    fac(pc),a0
  1597.     movem.l    d0-d1,2(a0)
  1598.     moveq.l    #0,d0
  1599.     rts
  1600.  
  1601. return_zero:
  1602.     moveq.l    #0,d0
  1603.     lea.l    fac(pc),a0
  1604.     move.l    d0,6(a0)
  1605.     rts
  1606.  
  1607.  
  1608. file_end:
  1609.     tst.l    d0
  1610.     bge    return_d0
  1611. return_minus:
  1612.     moveq    #-1,d0
  1613. return_d0:
  1614.     lea.l    fac(pc),a0
  1615.     move.l    d0,6(a0)
  1616.     moveq.l    #0,d0
  1617.     rts
  1618.  
  1619. return_buf:
  1620.     lea.l    tmp,a1
  1621. return_a1:
  1622.     lea.l    fac(pc),a0
  1623.     move.l    a1,6(a0)
  1624.     moveq.l    #0,d0
  1625.     rts
  1626.  
  1627. return_nul:
  1628.     lea.l    tmp,a1
  1629. return_nula1:
  1630.     clr.b    (a1)
  1631.     lea.l    fac(pc),a0
  1632.     move.l    a1,6(a0)
  1633.     moveq.l    #0,d0
  1634.     rts
  1635.  
  1636. *-----------------------------
  1637.  
  1638.     .even
  1639. fac:
  1640.     .dc.w    0
  1641.     .dc.l    0
  1642.     .dc.l    0
  1643.  
  1644. *-----------------------------
  1645.  
  1646.  * 外部関数エラー
  1647.  
  1648. irregular_param:
  1649.     lea.l    _irregular_param(pc),a1
  1650.     moveq    #4,d0
  1651.     bra    1f
  1652. openmode_err:
  1653.     lea.l    _openmode_err(pc),a1
  1654.     moveq    #1,d0
  1655.     bra    1f
  1656. 無効な要素数:
  1657.     lea.l    _無効な要素数(pc),a1
  1658.     moveq    #6,d0
  1659.     bra    1f
  1660. 文字列長すぎ:
  1661.     lea.l    _文字列長すぎ(pc),a1
  1662.     moveq    #1,d0
  1663.     bra    1f
  1664. doscall_err:
  1665.     lea.l    doscall_err_mes(pc),a1
  1666.     move.w    d0,d1
  1667.     not.w    d1
  1668.     subq.w    #1,d1
  1669.     bcs    1f        * んなはずないが
  1670.     cmpi.w    #23,d1
  1671.     bhi    1f        * 謎の DOS call error
  1672. @@:
  1673.     tst.b    (a1)+
  1674.     bne    @b
  1675.     dbra    d1,@b
  1676. 1:
  1677.     lea.l    fac(pc),a0
  1678.     moveq    #-1,d1        * error off の時の返り値
  1679.     move.l    d1,6(a0)
  1680.     rts
  1681.  
  1682. _irregular_param:
  1683.     .dc.b    '引き数の範囲が不正です',0
  1684. _openmode_err:
  1685.     .dc.b    'オープンモードの指定に誤りがあります',0
  1686. _無効な要素数:
  1687.     .dc.b    '無効な要素数を指定しました',0
  1688. _文字列長すぎ:
  1689.     .dc.b    '文字列が長すぎます',0
  1690. doscall_err_mes:
  1691.     .dc.b    0
  1692.     .dc.b    '指定したファイルは見つかりません',0
  1693.     .dc.b    '指定したディレクトリは見つかりません',0
  1694.     .dc.b    'オープンしているファイルが多すぎます',0
  1695.     .dc.b    'ディレクトリやボリュームラベルはアクセスできません',0
  1696.     .dc.b    '指定したハンドルはオープンされていません',0
  1697.     .dc.b    'メモリ管理領域がこわされました',0
  1698.     .dc.b    '実行するのに必要なメモリがありません',0
  1699.     .dc.b    '無効なメモリ管理ポインタを指定しました',0
  1700.     .dc.b    '不正な環境を指定しました',0
  1701.     .dc.b    '実行ファイルのフォーマットが異常です',0
  1702.     .dc.b    'オープンでアクセスモードが異常です',0        /* ???
  1703.     .dc.b    'ファイル名の指定に誤りがあります',0
  1704.     .dc.b    '無効なパラメータでコールしました',0
  1705.     .dc.b    'ドライブ指定に誤りがあります',0
  1706.     .dc.b    'カレントディレクトリは削除できません',0
  1707.     .dc.b    0
  1708.     .dc.b    0
  1709.     .dc.b    'このファイルは書き込みができません',0
  1710.     .dc.b    'このディレクトリはすでに登録されています',0    /* ???
  1711.     .dc.b    'ファイルがあるので削除できません',0
  1712.     .dc.b    'ファイルがあるのでリネームできません',0
  1713.     .dc.b    'ディスクがいっぱいでファイルが作れません',0
  1714.     .dc.b    'ディレクトリがいっぱいでファイルが作れません',0
  1715.     .dc.b    '指定の位置にはシークできません',0
  1716.     .even
  1717.  
  1718.  
  1719.     .end
  1720.  
  1721.